package entity

import (
	"shqsoft.cn/pasnj/base"

	"github.com/jinzhu/gorm"
)

//MIDOITEM3 中收三级科目
type MIDOITEM3 struct {
	ID   int    `gorm:"primary_key;column:ITID3"`
	Name string `gorm:"column:ITNM3;size:20"`
}

//TableName 中收三级科目表名
func (MIDOITEM3) TableName() string {
	return "T_CONF_MIDO_ITEM3"
}

//MIDOITEM2 中收二级科目
type MIDOITEM2 struct {
	ID   int    `gorm:"primary_key;column:ITID2"`
	Name string `gorm:"column:ITNM2;size:20"`
}

//TableName 中收二级科目表名
func (MIDOITEM2) TableName() string {
	return "T_CONF_MIDO_ITEM2"
}

//MIDOITEM1 中收一级科目
type MIDOITEM1 struct {
	ID   int    `gorm:"primary_key;column:ITID1"`
	Name string `gorm:"column:ITNM1;size:20"`
}

//TableName 中收一级科目表名
func (MIDOITEM1) TableName() string {
	return "T_CONF_MIDO_ITEM1"
}

//BaseMidoItem 中间业务科目结构体
type BaseMidoItem struct {
	ID        int       `gorm:"AUTO_INCREMENT;primary_key;column:ITID"`
	No        string    `gorm:"column:ITNO;size:10"`
	Name      string    `gorm:"column:ACNM;size:20"`
	NTPN3     int       `gorm:"column:NTPN3"`
	MIDOITEM3 MIDOITEM3 `gorm:"ForeignKey:NTPN3"`
	NTPN2     int       `gorm:"column:NTPN2"`
	MIDOITEM2 MIDOITEM2 `gorm:"ForeignKey:NTPN2"`
	NTPN1     int       `gorm:"column:NTPN1"`
	MIDOITEM1 MIDOITEM1 `gorm:"ForeignKey:NTPN1"`
}

//AfterCreate 新增数据之后，执行
func (b *BaseMidoItem) AfterCreate(tx *gorm.DB) (err error) {
	tx.Exec("INSERT INTO T_CONF_MIDO_TYPE(ITID,ITNO,ACNM,ITID3)"+
		"SELECT A.ITID,A.ITNO,A.ACNM,A.NTPN3 FROM T_CONF_MIDO_TYPE_DTIP A "+
		"WHERE A.ITID=?", b.ID)
	return
}

//AfterUpdate 修改数据之后，执行
func (b *BaseMidoItem) AfterUpdate(tx *gorm.DB) (err error) {
	tx.Exec("UPDATE T_CONF_MIDO_TYPE SET ITNO=B.ITNO,ACNM=B.ACNM,ITID3=B.NTPN3 "+
		"FROM T_CONF_MIDO_TYPE A INNER JOIN T_CONF_MIDO_TYPE_DTIP B ON A.ITID=B.ITID "+
		"WHERE A.ITID=?", b.ID)
	return
}

//AfterDelete 修改数据之后，执行
func (b *BaseMidoItem) AfterDelete(tx *gorm.DB) (err error) {
	tx.Exec("DELETE FROM T_CONF_MIDO_TYPE WHERE ITID=?", b.ID)
	return
}

//TableName BaseMidoItem 中间业务科目表名
func (BaseMidoItem) TableName() string {
	return "T_CONF_MIDO_TYPE_DTIP"
}

//BaseMidoItemEF 返回一个体中间业务科目结构体
func BaseMidoItemEF() base.EntityFunc {
	return func() interface{} {
		entity := BaseMidoItem{}
		return &entity
	}
}

//BaseMidoItemESF 返回一个体中间业务科目结构体数组
func BaseMidoItemESF() base.EntitiesFunc {
	return func() interface{} {
		var entities []BaseMidoItem
		return &entities
	}
}

//MIDOITEM3EF 返回一个体中间业务科目3结构体
func MIDOITEM3EF() base.EntityFunc {
	return func() interface{} {
		entity := MIDOITEM3{}
		return &entity
	}
}

//MIDOITEM3ESF 返回一个体中间业务科目3结构体数组
func MIDOITEM3ESF() base.EntitiesFunc {
	return func() interface{} {
		var entities []MIDOITEM3
		return &entities
	}
}

//MIDOITEM2EF 返回一个体中间业务科目2结构体
func MIDOITEM2EF() base.EntityFunc {
	return func() interface{} {
		entity := MIDOITEM2{}
		return &entity
	}
}

//MIDOITEM2ESF 返回一个体中间业务科目2结构体数组
func MIDOITEM2ESF() base.EntitiesFunc {
	return func() interface{} {
		var entities []MIDOITEM2
		return &entities
	}
}

//MIDOITEM1EF 返回一个体中间业务科目1结构体
func MIDOITEM1EF() base.EntityFunc {
	return func() interface{} {
		entity := MIDOITEM1{}
		return &entity
	}
}

//MIDOITEM1ESF 返回一个体中间业务科目1结构体数组
func MIDOITEM1ESF() base.EntitiesFunc {
	return func() interface{} {
		var entities []MIDOITEM1
		return &entities
	}
}

func init() {
	relationship := []string{"MIDOITEM3", "MIDOITEM2", "MIDOITEM1"}
	base.DaoPoolObj.Put("BaseMidoItem", base.NewDefaultDao(BaseMidoItemEF(), BaseMidoItemESF(), relationship))
	base.DaoPoolObj.Put("MIDOITEM3", base.NewDefaultDao(MIDOITEM3EF(), MIDOITEM3ESF(), nil))
	base.DaoPoolObj.Put("MIDOITEM2", base.NewDefaultDao(MIDOITEM2EF(), MIDOITEM2ESF(), nil))
	base.DaoPoolObj.Put("MIDOITEM1", base.NewDefaultDao(MIDOITEM1EF(), MIDOITEM1ESF(), nil))
}
